<?php
    // Chargement des parametres d'environnement
    error_reporting(E_ALL|E_STRICT);
    date_default_timezone_set('Pacific/Noumea');
    putenv('LANGUAGE=fr_FR');
    setlocale(LC_ALL, 'fr_FR');


    

    // Definition des chemins d'acces de l'application
    $PATH_BASE = '/var/www/motion3/';
    $PATH_LIBRARY    = $PATH_BASE.'lib/';
    $PATH_ZEND       = $PATH_LIBRARY.'Zend/';
    $PATH_CONTROLLER = $PATH_BASE.'app/controllers/';
    $PATH_VIEW       = $PATH_BASE.'app/views/';
    $FILE_INI        = $PATH_BASE.'app/config.ini';        
    
    // Definition du Path par defaut
    set_include_path( get_include_path() . PATH_SEPARATOR . $PATH_LIBRARY );
    
    // Chargement des fichiers requits par l'application
    include_once('Zend.php');
    
    Zend::loadFile('Ini.php', $PATH_ZEND . 'Config', $once=true);
    Zend::loadFile('Functions.php', $PATH_LIBRARY, $once=true);        
    Zend::loadFile('Front.php', $PATH_ZEND . 'Controller', $once=true);
    Zend::loadFile('Acl.php', $PATH_ZEND, $once=true);
    Zend::loadFile('Role.php', $PATH_ZEND . 'Acl', $once=true);
    Zend::loadFile('Session.php', $PATH_ZEND, $once=true);
    Zend::loadFile('Date.php', $PATH_ZEND, $once=true);
    Zend::loadFile('Db.php', $PATH_ZEND, $once=false);
    
    // Chargement de la configuration specifique de motion
    $config = new Zend_Config_Ini($FILE_INI, 'general');    
    define("C_CONF_PATH", $config->motion->confPath);
    define("C_THREAD_MODEL_FILE", $config->motion->threadModelFile);
    define("C_MOTION_MODEL_FILE", $config->motion->motionModelFile);
    define("C_CONTROL_PATH", $config->motion->ctlpath);
    define("C_CONTROL_MOTION", C_CONTROL_PATH . $config->motion->ctlport);
    define("C_MOTION_DIR", $config->motion->relativeRecordsDir);
    define("C_MOTION_FULLDIR", $config->motion->fullRecordsDir);
    define("C_MOTION_FLUSHDELAY", $config->motion->flushDelay);

    
    
    // Declaration du chargement automatique des classes
    function __autoload($class)
    {
        Zend::loadClass($class);
    }
    
    
    // Enregistrement des valeurs de post, get et session
    Zend::register('fPost', new Zend_Filter_Input($_POST));
    Zend::register('fGet', new Zend_Filter_Input($_GET));
    Zend::register('fSession', new Zend_Session('Zend_Auth'));        
    
    // Ouverture de la base de donnees et enregistrement
    $db = Zend_Db::factory($config->db->adapter, $config->db->config->asArray());
    Zend::register('db', $db);
    
    // Creation d'une vue par defaut
    $view = new Zend_View();
    $view->setScriptPath($PATH_VIEW);
    Zend::register('view', $view);
       

    // Creation du gestionnaire des droits utilisateurs
    $acl = new Zend_Acl();

    // Definition des groupes d'utilisateur
    $acl->addRole(new Zend_Acl_Role('guest')); // N'herite d'aucun control  
    $acl->addRole(new Zend_Acl_Role('staff'), 'guest'); // Herite de guest  
    $acl->addRole(new Zend_Acl_Role('editor'), 'staff'); // Herite de staff 
    $acl->addRole(new Zend_Acl_Role('admin')); // a tout les droits
        
    // Definition des droits associés au groupe    
    $acl->allow('guest', null, 'view'); // Peut seulement visionner les flux  
    $acl->allow('staff', null, array('consult')); // Peut consulter les sequences enregistrées
    $acl->allow('editor', null, array('save', 'delete')); // Peut sauver et supprimer des séquences
    $acl->allow('admin'); // Peut acceder aux parametres
    
    Zend::register('acl', $acl);    


    // Recuperation des donnees de la variable Session
    $session = Zend::registry('fSession');


    // Creation du controller principal
    $controller = Zend_Controller_Front::getInstance();
    $controller->setControllerDirectory($PATH_CONTROLLER);

    // Si l'utilisateur n'est pas identifié
    if ( !$session->login ){           
        $router = new Zend_Controller_RewriteRouter();  
        // Définition d'une nouvelle route par defaut
        $route = new Zend_Controller_Router_Route('/:controller/:action', array('controller' => 'user', 'action' => 'index'));
        $router->addRoute('default', $route);          
        $controller->setRouter($router);
    }
    
    // Dispatch de la route a suivre
    $controller->dispatch();
?>
